/* 
泛型:
    定义函数/类/接口时, 不确定的类型, 使用时才指定具体类型
    指在定义函数、接口或类的时候，不预先指定具体的类型，而在使用的时候再指定具体类型的一种特性。

需求:
  创建一个函数, 实现功能: 根据指定的数量 count 和数据 value , 
  创建一个包含 count 个 value 的数组
*/

(() => {
  
  function getArray(count: number, value: any): any[]{
    const arr: any[] = []
    for (let index = 0; index < count; index++) {
      arr.push(value)
    }
    return arr
  }

  const arr1 = getArray(3, 'atguigu')
  const arr2 = getArray(3, 12.345)

  // console.log(arr1, arr2)
  // arr1[0].length2
  // arr2[0].toString2()

})();

(() => {  
  /* 
  1. 定义泛型: 在函数定义时, 函数名的右侧 <T>    T / K / V
  2. 使用泛型: 在形参和函数体中使用
  3. 指定具体类型: 在调用函数时, 函数名的右侧 <具体类型>
  */
  function getArray<T>(count: number, value: T): T[]{
    const arr: T[] = []
    for (let index = 0; index < count; index++) {
      arr.push(value)
    }
    return arr
  }

  const arr = getArray<string>(3, 'abcd')
  arr[0].length
  const arr2 = getArray<number>(3, 12.345)
  arr2[0].toFixed(1)  // 12.3
 
})()